package com.minsf.rpc.proxy;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.minsf.rpc.model.RpcRequest;
import com.minsf.rpc.model.RpcResponse;
import com.minsf.rpc.serializer.JdkSerializer;
import com.minsf.rpc.serializer.Serializer;
import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Description Mock 服务代理（ JDK 动态代理 ）
 * @Author minify
 * @Date 2024/3/24 17:18
 * @Project sf-rpc
 */
@Slf4j
public class MockServiceProxy implements InvocationHandler {

    // 预定义的“兜底”实例
    private static final List<?> DEFAULT_LIST = new ArrayList<>();
    private static final Map<?, ?> DEFAULT_MAP = new HashMap<>();
    private static final String DEFAULT_STRING = "";
    // ... 可以为其他类型添加更多的默认实例

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        Class<?> returnType = method.getReturnType();
        log.info("mock invoke {}", method.getName());

        return getDefault(returnType);
    }

    private Object getDefault(Class<?> returnType) {
        // 基本数据类型
        if (returnType.isPrimitive()) {
            if (returnType == boolean.class) {
                return false;
            } else if (returnType == char.class) { // 你遗漏了char类型
                return '\0';
            } else if (returnType == byte.class) { // 你遗漏了byte类型
                return (byte) 0;
            } else if (returnType == short.class) {
                return (short) 0;
            } else if (returnType == int.class) {
                return 0;
            } else if (returnType == long.class) {
                return 0L;
            } else if (returnType == float.class) { // 你遗漏了float类型
                return 0.0f;
            } else if (returnType == double.class) { // 你遗漏了double类型
                return 0.0;
            }
        }
        // 对象类型
        else {
            if (returnType == List.class || returnType == ArrayList.class) {
                return DEFAULT_LIST; // 返回预定义的空列表
            } else if (returnType == Map.class || returnType == HashMap.class) {
                return DEFAULT_MAP; // 返回预定义的空映射
            } else if (returnType == String.class) {
                return DEFAULT_STRING; // 返回空字符串作为默认值
            }
            // ... 可以为其他类型添加更多的条件判断
        }
        return null; // 如果没有找到匹配的类型，返回null作为默认值
    }

    private Object getDefaultOld(Class<?> returnType) {

        // 基本数据类型
        if (returnType.isPrimitive()) {
            if (returnType == boolean.class) {
                return false;
            } else if (returnType == short.class) {
                return (short) 0;
            } else if (returnType == int.class) {
                return 0;
            } else if (returnType == long.class) {
                return 0L;
            }
        } else {

        }


        // 对象类型
        return null;
    }
}
